﻿using System;
using System.Collections.Generic;
using System.Web;
using System.Data;
using System.Data.SqlClient;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace AIC_PN
{
    public partial class UCDonVi : System.Web.UI.UserControl
    {
        private static int FatherID;
        private static string ParrentID;
        private PrepareDataForTreeView DataForTreeView = new PrepareDataForTreeView();
        #region Ham chuc nang

        protected void UpdateDonVi(int IDDonVi, string MaDonVi, string TenDonVi, string ThongTin, int UserID)
        {
            SqlTransaction MyTran = SqlHelper.BeginTransaction();
            try
            {
                List<SqlParameter> arrParams = new List<SqlParameter>();
                arrParams.Add(SqlHelper.CreateParameterObject("@IDDonVi", SqlDbType.Int, ParameterDirection.Input, IDDonVi));
                arrParams.Add(SqlHelper.CreateParameterObject("@MaDonVi", SqlDbType.NVarChar, ParameterDirection.Input, MaDonVi));
                arrParams.Add(SqlHelper.CreateParameterObject("@TenDonVi", SqlDbType.NVarChar, ParameterDirection.Input, TenDonVi));
                arrParams.Add(SqlHelper.CreateParameterObject("@ThongTin", SqlDbType.NVarChar, ParameterDirection.Input, ThongTin));
                arrParams.Add(SqlHelper.CreateParameterObject("@UserID", SqlDbType.Int, ParameterDirection.Input, UserID));
                string sql = "UPDATE dbo.tblDonVi SET MaDV=@MaDonVi,TenDV=@TenDonVi,ThongTin = @ThongTin, UpdateDate=GETDATE(),UserID=@UserID " +
                             "WHERE ID = @IDDonVi";
                SqlHelper.ExecuteNonQuery(CommandType.Text, sql, arrParams);
                MyTran.Commit();
                lblNotice.InnerText = "Cập nhật thành công !";
            }
            catch
            {
                MyTran.Rollback();
                MyCommon.AddMessage(this.Page.Master, "Cập nhật đơn vị xảy ra lỗi !", MyConst.MessageType.Error);
            }
        }

        protected void ThemMoiDonVi(string MaDonVi, string TenDonVi, string ThongTin, int FatherID, string ParentID, int UserID)
        {
            SqlTransaction MyTran = SqlHelper.BeginTransaction();
            try
            {
                List<SqlParameter> arrParams = new List<SqlParameter>();
                arrParams.Add(SqlHelper.CreateParameterObject("@MaDonVi", SqlDbType.NVarChar, ParameterDirection.Input, MaDonVi));
                arrParams.Add(SqlHelper.CreateParameterObject("@TenDonVi", SqlDbType.NVarChar, ParameterDirection.Input, TenDonVi));
                arrParams.Add(SqlHelper.CreateParameterObject("@ThongTin", SqlDbType.NVarChar, ParameterDirection.Input, ThongTin));
                arrParams.Add(SqlHelper.CreateParameterObject("@FatherID", SqlDbType.Int, ParameterDirection.Input, FatherID));
                arrParams.Add(SqlHelper.CreateParameterObject("@ParentID", SqlDbType.NVarChar, ParameterDirection.Input, ParentID));
                arrParams.Add(SqlHelper.CreateParameterObject("@UserID", SqlDbType.Int, ParameterDirection.Input, UserID));
                string sql = "INSERT INTO dbo.tblDonVi(" +
                             "MaDV,TenDV,ThongTin,FatherID,ParentID,CreateDate,UpdateDate,UserID) " +
                             "VALUES (@MaDonVi,@TenDonVi,@ThongTin,@FatherID,@ParentID,GETDATE(),GETDATE(),@UserID) " +
                             "DECLARE @ParentIDString NVARCHAR(50) " +
                             "SET @ParentIDString = (SELECT ParentID FROM dbo.tblDonVi WHERE ID = @FatherID) " +
                             "UPDATE dbo.tblDonVi SET ParentID = @ParentIDString + CONVERT(VARCHAR(5),IDENT_CURRENT('dbo.tblDonVi')) + ';' " +
                             "WHERE ID = IDENT_CURRENT('dbo.tblDonVi')";
                SqlHelper.ExecuteNonQuery(CommandType.Text, sql, arrParams);
                MyTran.Commit();
                lblNotice.InnerText = "Thêm mới thành công !";
            }
            catch
            {
                MyTran.Rollback();
                MyCommon.AddMessage(this.Page.Master, "Thêm mới đơn vị xảy ra lỗi !", MyConst.MessageType.Error);
            }
        }

        protected DataTable GetChiTietDonVi(int IDDonVi)
        {
            List<SqlParameter> arrParams = new List<SqlParameter>();
            arrParams.Add(SqlHelper.CreateParameterObject("@ID", SqlDbType.Int, ParameterDirection.Input, IDDonVi));
            return SqlHelper.ExecuteDataTable(CommandType.Text, "Select * from tblDonVi where ID = @ID", arrParams);
        }

        protected DataTable XoaDonVi(int IDDonVi)
        {
            List<SqlParameter> arrParams = new List<SqlParameter>();
            arrParams.Add(SqlHelper.CreateParameterObject("@ID", SqlDbType.Int, ParameterDirection.Input, IDDonVi));
            return SqlHelper.ExecuteDataTable(CommandType.Text, "DELETE FROM tblDonVi where ID = @ID", arrParams);
        }

        protected void BindDataToTreeView()
        {
            trvDonVi.Nodes.Clear();
            DataForTreeView.PopulateRootLevel(trvDonVi);
            trvDonVi.ExpandAll();
        }

        /// <summary>
        /// Thủ tục kiểm tra quyền sử dụng của người dùng có được quyền truy cập vào mục này hay không?
        /// </summary>
        private void CheckPermission()
        {
            Dictionary<string, int> Role = MyCommon.CheckPermission("DanhMucDonVi");
            if (Role == null || Role["Xem"] == 0)
            {
                Response.Redirect("Index.aspx?p=0");
            }
        }
        #endregion Ham chuc nang

        #region Ham su kien

        protected void Page_Load(object sender, EventArgs e)
        {
            CheckPermission();
            lblNotice.Visible = false;
            if (!IsPostBack)
            {
                DataForTreeView.PopulateRootLevel(trvDonVi);
            }
            int UserID = Convert.ToInt32(Session["userid"]);
        }

        protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
        {
            Response.Redirect("index.aspx");
        }

        protected void trvDonVi_TreeNodePopulate(object sender, TreeNodeEventArgs e)
        {
            DataForTreeView.PopulateSubLevel(Int32.Parse(e.Node.Value), e.Node);
        }

        protected void trvDonVi_SelectedNodeChanged(object sender, EventArgs e)
        {
            DataTable ThongTinDonVi = GetChiTietDonVi(Convert.ToInt32(trvDonVi.SelectedValue));
            txtMaDonVi.Text = ThongTinDonVi.Rows[0][1].ToString();
            txtTenDonVi.Text = ThongTinDonVi.Rows[0][2].ToString();
            txtThongTin.Text = ThongTinDonVi.Rows[0][3].ToString();
            FatherID = Convert.ToInt32(ThongTinDonVi.Rows[0][0]);
            btnLuu.CommandName = MyConst.Action.Update;
        }

        protected void btnLuu_Click(object sender, EventArgs e)
        {
            try
            {
                int UserID = Convert.ToInt32(Session["userid"]);
                if (btnLuu.CommandName == MyConst.Action.Update)
                {
                    UpdateDonVi(FatherID, txtMaDonVi.Text, txtTenDonVi.Text, txtThongTin.Text, UserID);
                    BindDataToTreeView();
                    MyCommon.AddMessage(this.Page.Master, "Cập nhật đơn vị thành công !", MyConst.MessageType.Success);
                }
                else if (btnLuu.CommandName == MyConst.Action.Addnew)
                {
                    ThemMoiDonVi(txtMaDonVi.Text, txtTenDonVi.Text, txtThongTin.Text, FatherID, "", UserID);
                    BindDataToTreeView();
                    MyCommon.AddMessage(this.Page.Master, "Thêm mới đơn vị thành công !", MyConst.MessageType.Success);
                }
            }
            catch (Exception)
            {
                MyCommon.AddMessage(this.Page.Master, "Có lỗi xảy ra trong quá trình thao tác !", MyConst.MessageType.Error);
            }
        }

        protected void btnHuy_Click(object sender, EventArgs e)
        {
            txtMaDonVi.Text = "";
            txtTenDonVi.Text = "";
            txtThongTin.Text = "";
        }

        protected void btnThemMoi_Click(object sender, EventArgs e)
        {
            btnLuu.CommandName = MyConst.Action.Addnew;
            txtMaDonVi.Text = "";
            txtTenDonVi.Text = "";
            txtThongTin.Text = "";
        }

        protected void btnXoa_Click(object sender, EventArgs e)
        {
            try
            {
                lblNotice.Visible = true;
                TreeNode CurentNode = trvDonVi.SelectedNode;
                if (CurentNode.ChildNodes.Count > 0)
                {
                    MyCommon.AddMessage(this.Page.Master, "Không thể xóa đơn vị cấp cha !", MyConst.MessageType.Warning);
                }
                else
                {
                    XoaDonVi(Convert.ToInt32(CurentNode.Value));
                    lblNotice.InnerText = "Xóa thành công";
                    MyCommon.AddMessage(this.Page.Master, "Xóa đơn vị thành công !", MyConst.MessageType.Success);
                    BindDataToTreeView();
                }
            }
            catch (Exception)
            {
                MyCommon.AddMessage(this.Page.Master, "Có lỗi xảy ra trong quá trình thao tác !", MyConst.MessageType.Error);
            }
        }
        #endregion Ham su kien
    }

    public class Class1
    {
    }
}